मान द्वारा कॉल करें और सी में संदर्भ द्वारा कॉल करें
C भाषा में फ़ंक्शन में डेटा को पास करने के लिए दो तरीके हैं, अर्थात्, मूल्य द्वारा कॉल करें और संदर्भ द्वारा कॉल करें।
आइए एक -एक करके C भाषा में संदर्भ द्वारा कॉल और कॉल को समझें।
सी में मूल्य द्वारा कॉल करें
मूल्य विधि द्वारा कॉल में, वास्तविक मापदंडों का मान औपचारिक मापदंडों में कॉपी किया जाता है। दूसरे शब्दों में, हम कह सकते हैं कि वैरिएबल के मान का उपयोग फ़ंक्शन कॉल में कॉल में मूल्य विधि द्वारा किया जाता है। मूल्य विधि द्वारा कॉल में, हम औपचारिक पैरामीटर द्वारा वास्तविक पैरामीटर के मान को संशोधित नहीं कर सकते हैं। मूल्य द्वारा कॉल में, विभिन्न मेमोरी को वास्तविक और औपचारिक मापदंडों के लिए आवंटित किया जाता है क्योंकि वास्तविक पैरामीटर के मूल्य को औपचारिक पैरामीटर में कॉपी किया जाता है। वास्तविक पैरामीटर वह तर्क है जिसका उपयोग फ़ंक्शन कॉल में किया जाता है जबकि औपचारिक पैरामीटर वह तर्क है जिसका उपयोग फ़ंक्शन परिभाषा में किया जाता है। आइए नीचे दिए गए उदाहरण द्वारा सी भाषा में मूल्य द्वारा कॉल की अवधारणा को समझने का प्रयास करें:
उदाहरण
#samaahitaF<PsaTidiAayaAae.Pca>
riKta parivataZna(paunaZ AMkitaRkrnaa) {
mauDznama("pahlae jaaed.naa kimata AMDr samaaraeh AMkita krnaa=%paunaZ \n",AMkitaRkrnaa);
AMkitaRkrnaa=AMkitaRkrnaa+100;
mauDznama("baaD jaaed.naa kimata AMDr samaaraeh AMkita krnaa=%paunaZ \n", AMkitaRkrnaa);
}
paunaZ mauqyaF() {
paunaZ PKsa=100;
mauDznama("pahlae samaaraeh paukarnaa x=%paunaZ \n", PKsa);
parivataZna(PKsa);//paasaiMga kimata maeM samaaraeh
mauDznama("baaD samaaraeh paukarnaa x=%paunaZ \n", PKsa);
naivaZtanama 0;
}
आउटपुट
pahlae samaaraeh paukarnaa PKsa=100
pahlae jaaed.naa kimata AMDr samaaraeh AMkitaRkrnaa=100
baaD jaaed.naa kimata AMDr samaaraeh AMkitaRkrnaa=200
baaD samaaraeh paukarnaa PKsa=100
मान द्वारा कॉल करें उदाहरण: दो चर के मूल्यों को स्वैप करना
उदाहरण
#samaahitaF <PsaTidiAayaAae.Pca>
riKta baDlanaa(paunaZ , paunaZ); //pzaaeTaeTaEpa ka samaaraeh
paunaZ mauqyaF()
{
paunaZ P = 10;
paunaZ bai = 20;
mauDznama("pahlae ADlaa-baDlai maana maeM mauqya a = %paunaZ, b = %paunaZ\n",P,bai); // CpaaEZ kimata ka P AaIr bai maeM mauqyaF
baDlanaa(P,bai);
mauDznama("baaD ADlaa-baDlai maana maeM mauqya a = %paunaZ, b = %paunaZ\n",P,bai); // kimata ka vaastavaik paIramaiTr kraetau nahiM parivataZna vDara baDlaRrha AaIpacaarik paIramaiTr maeM paukarnaa vDara kimata, P = 10, bai = 20
}
riKta baDlanaa (paunaZ P, paunaZ bai)
{
paunaZ AsYaayai;
AsYaayai = P;
P=bai;
bai=AsYaayai;
mauDznama("baaD ADlaa-baDlai maana maeM samaaraeh a = %paunaZ, b = %paunaZ\n",P,bai); // AaIpacaarik paIramaiTr, P = 20, bai = 10
}
आउटपुट
pahlae ADlaa-baDlai maana maeM mauqyaF P = 10, bai = 20
baaD ADlaa-baDlai maana maeM samaaraeh P = 20, bai = 10
baaD ADlaa-baDlai maana maeM mauqyaF P = 10, bai = 20
सी में संदर्भ द्वारा कॉल करें
संदर्भ द्वारा कॉल में, चर का पता वास्तविक पैरामीटर के रूप में फ़ंक्शन कॉल में पारित किया जाता है। वास्तविक मापदंडों को बदलकर वास्तविक मापदंडों के मान को संशोधित किया जा सकता है क्योंकि वास्तविक मापदंडों का पता पारित किया जाता है। संदर्भ द्वारा कॉल में, मेमोरी आवंटन औपचारिक मापदंडों और वास्तविक मापदंडों दोनों के लिए समान है। फ़ंक्शन के सभी संचालन वास्तविक मापदंडों के पते पर संग्रहीत मान पर किए जाते हैं, और संशोधित मान एक ही पते पर संग्रहीत होता है। संदर्भ द्वारा कॉल के लिए निम्नलिखित उदाहरण पर विचार करें।
उदाहरण
#samaahitaF<PsaTidiAayaAae.Pca>
riKta parivataZna(paunaZ *AMkitaRkrnaa) {
mauDznama("pahlae jaaed.naa kimata AMDr samaaraeh AMkita krnaa=%paunaZ \n",*AMkitaRkrnaa);
(*AMkitaRkrnaa) += 100;
mauDznama("baaD jaaed.naa kimata AMDr samaaraeh AMkita krnaa=%paunaZ \n", *AMkitaRkrnaa);
}
paunaZ mauqyaF() {
paunaZ PKsa=100;
mauDznama("pahlae samaaraeh paukarnaa x=%paunaZ \n", PKsa);
parivataZna(&PKsa);//paasaiMga saMDBaZ maeM samaaraeh
mauDznama("baaD samaaraeh paukarnaa x=%paunaZ \n", PKsa);
naivaZtanama 0;
}
आउटपुट
pahlae samaaraeh paukarnaa PKsa=100
pahlae jaaed.naa kimata AMDr samaaraeh AMkitaRkrnaa=100
baaD jaaed.naa kimata AMDr samaaraeh AMkitaRkrnaa=200
baaD samaaraeh paukarnaa PKsa=200
संदर्भ उदाहरण द्वारा कॉल करें: दो चर के मूल्यों को स्वैप करना
उदाहरण
#samaahitaF <PsaTidiAayaAae.Pca>
riKta baDlanaa(paunaZ *, paunaZ *); //pzaaeTaeTaEpa ka samaaraeh
paunaZ mauqyaF()
{
paunaZ P = 10;
paunaZ bai = 20;
mauDznama("pahlae ADlaa-baDlai maana maeM mauqya a = %paunaZ, b = %paunaZ\n",P,bai); // CpaaEZ kimata ka P AaIr bai maeM mauqyaF
baDlanaa(&P,&bai);
mauDznama("baaD ADlaa-baDlai maana maeM mauqya a = %paunaZ, b = %paunaZ\n",P,bai); // maana ka vaastavaik paIramaiTr kraetau parivataZna maeM paukarnaa vDara saMDBaZ, P = 10, bai = 20
}
riKta baDlanaa (paunaZ *P, paunaZ *bai)
{
paunaZ AsYaayai;
AsYaayai = *P;
*P=*bai;
*bai=AsYaayai;
mauDznama("baaD ADlaa-baDlai maana maeM samaaraeh a = %paunaZ, b = %paunaZ\n",*P,*bai); // AaIpacaarik paIramaiTr, P = 20, bai = 10
}
आउटपुट
pahlae ADlaa-baDlai maana maeM mauqyaF P = 10, bai = 20
baaD ADlaa-baDlai maana maeM samaaraeh P = 20, bai = 10
baaD ADlaa-baDlai maana maeM mauqyaF P = 20, bai = 10
सी में संदर्भ द्वारा मूल्य और कॉल के बीच अंतर
संदर्भ द्वारा मूल्य कॉल द्वारा कॉल करें 1 मान की एक प्रति फ़ंक्शन में पारित की जाती है फ़ंक्शन के अंदर किए गए 2 परिवर्तन केवल फ़ंक्शन तक सीमित हैं। औपचारिक मापदंडों को बदलकर वास्तविक मापदंडों के मान नहीं बदलते हैं। फ़ंक्शन के अंदर किए गए परिवर्तन फ़ंक्शन के बाहर भी मान्य हैं। वास्तविक मापदंडों के मान औपचारिक मापदंडों को बदलकर बदलते हैं। 3 वास्तविक और औपचारिक तर्क अलग -अलग मेमोरी स्थान पर बनाए जाते हैं और एक ही मेमोरी स्थान पर औपचारिक तर्क बनाए जाते हैं